package cn.iocoder.yudao.module.reading.dal.mysql.recommendation;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.reading.dal.dataobject.recommendation.RecommendationZoneDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 推荐专区 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface RecommendationZoneMapper extends BaseMapperX<RecommendationZoneDO> {

    /**
     * 查询启用的推荐专区列表
     *
     * @param language 语言类型（可选）
     * @param zoneType 专区类型（可选）
     * @return 推荐专区列表
     */
    default List<RecommendationZoneDO> selectEnabledZones(String language, String zoneType) {
        LambdaQueryWrapperX<RecommendationZoneDO> wrapper = new LambdaQueryWrapperX<RecommendationZoneDO>()
                .eq(RecommendationZoneDO::getEnabled, true);

        // 语言条件
        if (language != null) {
            wrapper.and(w -> w.eq(RecommendationZoneDO::getLanguage, language)
                    .or()
                    .eq(RecommendationZoneDO::getLanguage, "all"));
        }

        return selectList(wrapper
                .eqIfPresent(RecommendationZoneDO::getZoneType, zoneType)
                .orderByAsc(RecommendationZoneDO::getSortOrder)
                .orderByDesc(RecommendationZoneDO::getCreateTime));
    }

    /**
     * 根据专区类型查询推荐专区
     *
     * @param zoneType 专区类型
     * @param language 语言类型（可选）
     * @return 推荐专区列表
     */
    default List<RecommendationZoneDO> selectByZoneType(String zoneType, String language) {
        return selectList(new LambdaQueryWrapperX<RecommendationZoneDO>()
                .eq(RecommendationZoneDO::getZoneType, zoneType)
                .eq(RecommendationZoneDO::getEnabled, true)
                .and(language != null, wrapper -> wrapper
                        .eq(RecommendationZoneDO::getLanguage, language)
                        .or()
                        .eq(RecommendationZoneDO::getLanguage, "all"))
                .orderByAsc(RecommendationZoneDO::getSortOrder));
    }

    /**
     * 根据目标年龄段查询推荐专区
     *
     * @param targetAge 目标年龄段
     * @param language  语言类型（可选）
     * @return 推荐专区列表
     */
    default List<RecommendationZoneDO> selectByTargetAge(String targetAge, String language) {
        return selectList(new LambdaQueryWrapperX<RecommendationZoneDO>()
                .eq(RecommendationZoneDO::getTargetAge, targetAge)
                .eq(RecommendationZoneDO::getEnabled, true)
                .and(language != null, wrapper -> wrapper
                        .eq(RecommendationZoneDO::getLanguage, language)
                        .or()
                        .eq(RecommendationZoneDO::getLanguage, "all"))
                .orderByAsc(RecommendationZoneDO::getSortOrder));
    }

}
